home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 8
/
Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso
/
Aminet
/
mus
/
play
/
tracker_4_31.lzh
/
tracker
/
Amiga
/
popen.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-14
|
2KB
|
105 lines
/* amiga/popen.c
vi:ts=3 sw=3:
*/
/* $Id: popen.c,v 1.8 1995/02/14 16:51:22 espie Exp espie $
* $Log: popen.c,v $
* Revision 1.8 1995/02/14 16:51:22 espie
* *** empty log message ***
*
* Revision 1.7 1995/01/13 13:31:35 espie
* *** empty log message ***
*
* Revision 1.5 1994/01/07 15:08:54 Espie
* Maybe correct code now...
*/
#include <proto/dos.h>
#include <proto/exec.h>
#include <exec/tasks.h>
#include <dos/dostags.h>
#include "defs.h"
ID("$Id: popen.c,v 1.8 1995/02/14 16:51:22 espie Exp espie $")
/*
### CSupport/popen
###
### NAME
### popen/pclose -- Unix-like pipes
###
### STATUS
### Experimental
### does not work with csh !
###
*/
FILE *popen(char *command, char *mode)
{
static char pname[25];
struct Task *me = FindTask(0);
static count = 0;
count++;
/* guarantees a unique pipe name ! */
sprintf(pname, "pipe:tr_%lx_%d", me, count);
if (strcmp(mode, "r") == 0)
/* open pipe for reading */
{
FILE *reader;
BPTR writer, null;
writer = Open(pname, MODE_NEWFILE);
reader = fopen(pname, "r");
null = Open("NIL:", MODE_NEWFILE);
if (SystemTags(command, SYS_Input, null,
SYS_Output, writer, SYS_Asynch, TRUE,
NP_StackSize, me->tc_SPUpper - me->tc_SPLower,
TAG_END) == -1)
{
Close(null);
Close(writer);
fclose(reader);
return NULL;
}
else
return reader;
}
else if (strcmp(mode, "w") == 0)
/* open pipe for writing */
{
FILE *writer;
BPTR reader, null;
writer = fopen(pname, "w");
reader = Open(pname, MODE_OLDFILE);
null = Open("NIL:", MODE_NEWFILE);
if (SystemTags(command, SYS_Input, reader,
SYS_Output, null, SYS_Asynch, TRUE,
NP_StackSize, me->tc_SPUpper - me->tc_SPLower,
TAG_END) == -1)
{
Close(null);
Close(reader);
fclose(writer);
return NULL;
}
else
return writer;
}
else
return NULL;
}
/* for us, pclose is just fclose.
* But we have to insure the file is empty first
*/
void pclose(FILE *f)
{
while (fgetc(f) != EOF)
;
fclose(f);
}